/**
  ******************************************************************************
  * @文件名           : dri_flash_sst.h
  * @作者             : citunhk
  * @功能介绍         : Flash驱动
  *	@日期             : 2022.11.1
  ******************************************************************************
  * @注意
  *
  *
  *
  ******************************************************************************
  *更改记录
  *日期 修改人 修改内容
  *
  *
  *
  ******************************************************************************
  */
#ifndef __DRI_FLASH_SST_H
#define __DRI_FLASH_SST_H

#include <stdint.h>

/* Private define 私有宏定义	--------------------------------------------------------*/
#define READ_STAUS_REG			0x05				//读状态寄存器
#define READ_DEVICE_ID			0xAB				//获取设备ID信息
#define READ_JEDEC_ID			0x9F				//JEDEC的ID信息

#define READ_DATA				0x03				//读取存储器数据
#define HIGH_SPEED_READ_DATA	0x0B				//快速读取存储器数据
#define BYTE_PROGRAM			0x02				//字节编程--写数据
#define AAI_WORD_PROGRAM		0xAD				//自动地址递增（AAI）字编程

#define SECTOR_ERACE_4KB		0x20				//扇区擦除
#define BLOCK_ERACE_32KB		0x52				//32KB块擦除
#define BLOCK_ERACE_64KB		0xD8				//64KB块擦除
#define CHIP_ERACE				0xC7				//片擦除

#define WRITE_ENABLE			0x06				//写使能，设置状态寄存器
#define WRITE_DISENABLE			0x04				//写失能
#define EN_WRITE_SR				0x50				//使能写状态寄存器
#define WRITE_SR				0x01				//写状态寄存器
#define EBSY					0X70				//允许AAI模式期间，SO脚输出忙状态命令
#define DBSY					0X80				//禁止AAI模式期间，SO脚输出忙状态命令


#define ADDR_SYSTEAM_PARA		0x1FF000		//系统参数存储地址
#define ADDR_USER_PARA	        0x1FD000		//用户参数存储地址
#define ADDR_SAVE		        0x1FC000		//校准存储地址
#define ADDR_PID_PARA		    0x1F9000		//PID参数
#define ADDR_USER_SAVE		    0x1F8000		//用户参数出厂地址
#define ADDR_PID_SAVE		    0x1F7000		//PID参数

uint8_t DRI_Flash_ReadByte(uint32_t readAddr);
uint8_t DRI_Flash_HighSpeedReadByte(uint32_t readAddr);

void DRI_Flash_ReadBuffer(uint8_t* pBuffer, uint32_t readAddr, uint16_t numByteToRead);

void DRI_Flash_HighSpeedReadBuffer(uint8_t* pBuffer, uint32_t readAddr, uint16_t numByteToRead);

void DRI_Flash_WriteBuffer(uint8_t *pBuffer, uint32_t writeAddr, uint16_t bufferLength);
void DRI_Flash_WriteBytes(uint8_t byte, uint32_t writeAddr, uint32_t byteLength);
void DRI_Flash_AAI_WriteBytes(uint8_t byte, uint32_t addr, uint32_t byteLength);
void DRI_Flash_AAI_WriteBuffer(uint8_t *pBuffer,uint32_t addr,uint16_t bufferLength);

void DRI_Flash_Erase_4KByte(uint32_t addr);
//void DRI_Flash_Erase_32KByte(uint32_t addr);
//void DRI_Flash_Erase_64KByte(uint32_t addr);
//void DRI_Flash_Erase_Chip(void);

void DRI_Flash_Init(void);

#endif
